package com.maimao.model.order.vo;

import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import com.alibaba.excel.annotation.write.style.ContentRowHeight;
import com.alibaba.excel.annotation.write.style.HeadRowHeight;
import com.baomidou.mybatisplus.annotation.TableField;
import com.maimao.model.order.es.EsOrderGoods;
import com.maimao.model.order.es.EsOrderShop;
import com.maimao.utils.excel.convert.OrderShopStatusConvert;
import com.maimao.utils.excel.convert.OrderStatusConvert;
import com.maimao.utils.excel.convert.OrderTypeConvert;
import com.maimao.utils.excel.convert.ShippedStatusConvert;
import lombok.Data;

import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;

/**
 * @author MaoLin Wang
 * @date 2021/4/28 上午11:12
 */
@Data
@ContentRowHeight(24)
@HeadRowHeight(30)
@ColumnWidth(25)
@ExcelIgnoreUnannotated
public class ExportOrderEntity {
    /**
     * 订单id
     */
    @ExcelProperty("订单编号")
    private String id;

    /**
     * 用户id
     */
    @ExcelProperty("用户编号")
    private String userId;

    /**
     * 收货人
     */
    @ExcelProperty("收货人")
    private String consignee;

    @ExcelProperty("收货人手机号")
    private String mobile;

    /**
     * 系统优惠券id
     */
    private String sysCouponId;

    /**
     * 积分总减免
     */
    @ExcelProperty("积分减免额度(元)")
    private BigDecimal integral;

    /**
     * 是否使用了积分
     */
    @ExcelProperty("是否使用了积分")
    private Boolean useIntegral;

    /**
     * 支付code
     */
    @ExcelProperty("支付code")
    private String payCode;

    /**
     * 支付时间
     */
    @ExcelProperty("支付时间")
    private LocalDateTime payTime;

    @ExcelProperty("订单创建时间")
    private LocalDateTime createTime;

    /**
     * 订单取消时间
     */
    @ExcelProperty("订单关闭时间")
    private LocalDateTime closeTime;

    /**
     * 订单状态(1-已提交-待付款，2-已付款-待发货， 3 -交易成功，4-交易取消 )
     */
//    @ExcelProperty(value = "订单状态",converter = OrderStatusConvert.class)
//    private Integer status;
    /**
     * 店铺订单状态(1-已提交-待付款，2-已付款-待发货，3 部分发货  4 全部发货 5  -交易成功，6-交易取消)
     */
    @ExcelProperty(value = "订单状态",converter = OrderShopStatusConvert.class)
    private Integer orderShopOrderStatus;

    @ExcelProperty("删除状态")
    private Boolean deleted;

    /**
     * 1 普通 2 秒杀
     */
    @ExcelProperty(value = "订单类型",converter = OrderTypeConvert.class)
    private Integer type;

    /////////////OrderShop///////////////

    @ExcelProperty("店铺编号")
    private String shopId;

    @ExcelProperty("店铺名")
    private String shopName;

    /**
     * 店铺优惠券id
     */
    private String shopCouponId;


    /**
     * 运费
     */
    @ExcelProperty("运费")
    private BigDecimal deliveryFee;

    /**
     * 优惠券总减免
     */
    @ExcelProperty("优惠券总减免")
    private BigDecimal couponPrice;

    /**
     * 订单总价（当前店铺的订单总价）
     */
    @ExcelProperty("订单总额")
    private BigDecimal totalPrice;

    /**
     * 实际需支付的总价
     */
    @ExcelProperty("实际支付金额")
    private BigDecimal actualPrice;



    /**
     * 物流编号
     */
    @ExcelProperty("物流编号")
    private String shipSn;

    /**
     * 1. 存在换货 0 未退换货 默认 0
     */
    @ExcelProperty("换货状态")
    private Integer changeStatus;

    /**
     * 退货申请id
     */
    private String refundId;

    /**
     * 是否开发票
     */
    @ExcelProperty("开具发票")
    private Boolean invoice;


    //////////////////OrderGoods/////////////////////

    @ExcelProperty("评论状态")
    private Boolean comment;

    @ExcelProperty("sku编号")
    private String skuId;

    @ExcelProperty("商品编号")
    private String goodsId;

    @ExcelProperty("宝贝名称")
    private String title;

    @ExcelProperty("购买数量")
    private Integer num;

    @ExcelProperty("商品价格")
    private BigDecimal price;

    private String brandId;

    @ExcelProperty(value = "发货状态",converter = ShippedStatusConvert.class)
    private Integer shippedStatus;

    /**
     * 确认收货时间
     */
    @ExcelProperty("确认收货时间")
    private LocalDateTime receiveTime;

    /**
     * 赠送积分数
     */
    @ExcelProperty("赠送积分数")
    private Integer giveIntegral;

}
